草庐IT

linux - 使用 AWK 和 BASH 将大型压缩文件拆分为多个输出

我有一个很大(3GB)的gzip文件,其中包含两个字段:NAME和STRING。我想将这个文件拆分成更小的文件——如果第一个字段是john_smith,我希望将字符串放在john_smith.gz中。注意:字符串字段可以并且确实包含特殊字符。我可以使用BASH在域上的for循环中轻松完成此操作,但我更喜欢使用AWK一次读取文件的效率。我尝试在awk中使用系统函数,并在字符串周围使用转义单引号zcat大文件.gz|awk'{system("echo-e'"'"'"$1"\t"$2"'"'"'|gzip>>"$1".gz");}'它在大多数行上都能完美地工作,但是其中一些被打印到STDER

linux - 压缩 Bash 脚本以解析文件

我有这个pases文本文件的bash脚本,我想让它更简单一些,更短一些,以提高效率,有人对我如何做到这一点有任何想法吗?$vifunctiondisplayHelp{echo"Use'-f'tosetthefiletobeused"echo"Use'-s'tosortthedatabyacolumn"echo"Use'-m'tooutputtherowswhichmatchthisexpression"}functiondisplayColumn{columnnumber="$2"awk'{print$'$columnnumber'}'$1}functiondisplayParamet

linux - 如何使用 Bash 中的 iconv 递归重命名文件和文件夹

我一直在尝试使用iconv递归重命名文件和文件夹但没有成功,文件已正确重命名但文件夹没有。我用于文件的是(工作完美):find.-name*-depth\-execbash-c'mv"$1""${1%/*}/$(iconv-fUTF8-tASCII//TRANSLIT我对文件和文件夹的尝试(失败:仅重命名文件夹):find.-execbash-c'mv"$1""$(iconv-fUTF8-tASCII//TRANSLIT原始问题:我只想批量重命名很多文件,使它们“对网络友好”,比如删除空格、奇怪的字符等等,目前我有find.-name'*'-depth\|whilereadf;domv

linux - 用于创建自定义缩略图的 Bash 脚本

我需要一个bash脚本来获取某个指定文件夹中的所有图像;采用他们的分辨率,如果它低于最小值则什么都不做,否则创建一个中等大小的缩略图(200x150像素)。我在Windows中使用Imagemagick。但是在Linux上,我不能使用相同的脚本,所以我需要编写一个新脚本。这就是我到目前为止的想法。#!/bin/bashforfilesin/path/to/image/*doTESTFILE=`echo"$files"|sed's/|//g'|xargsfile-b|awk'{print$1}'`whilereadFCHECKSIZE=`file"$TESTFILE"-b|sed's//

linux - “For”循环并在 Bash 脚本中休眠

我有一个带有for循环的Bash脚本,我想休眠X秒。#!/bin/shforiin`seq8`;dosshw$i'uptime;ps-elf|grephttpd|wc-l;free-m;mpstat';done&pid=$!kill-9$pid在Bash中:sleep2休眠两秒钟。如何在两秒后自动终止pid? 最佳答案 喜欢评论中的建议#!/bin/shforiin`seq8`;dosshw$i'uptime;ps-elf|grephttpd|wc-l;free-m;mpstat';done&pid=$!sleep2kill-9$p

linux - Bash:如果管道 IO 空闲则关闭

如果管道流空闲了一段时间,如何关闭程序?比如说:一些程序|closeidlepipe-t500|其他程序是否有一些程序closeidlepipe可以在空闲一段时间后关闭(-t500)?timeout可以在一段时间后关闭,但不与“idle”区别。更新重要的是要注意someprogram输出无穷无尽的二进制数据流。数据可能包含空字符\0并且应该逐字传送。 最佳答案 这是执行此操作的程序核心的一般形式。while(1){structtimevaltv;tv.m_sec=0;tv.m_usec=500000;intmarker=1;sele

linux - 如何编写 bash shell 脚本以通过 ssh 连接到远程计算机并更改用户并导出 env 变量并执行其他命令

我有一个在多个不同的远程redhat机器上运行的网络服务。每当我想更新服务时,我都会从版本控制库(我使用perforce)同步用perl编写的新Web服务源代码,并使用新同步的perl代码重新启动服务。我觉得一个一个登录到远程机器,然后手动一个一个重启服务的那一系列命令,太无聊了。所以我写了一个像下面这样的bash脚本update.sh以“一次在一个地方做,更新所有机器”。我将在我的本地机器上运行这个shell脚本。不过好像不行。它只执行第一个命令“sudo-uwebservice_username-i”,正如我从本地机器的命令行中看到的那样。(下面的代码仅显示了它将如何更新远程Web

linux - 参数后文件名的 Bash Tab 补全

我最近从ScientificLinux6迁移到CentOS7,但在新操作系统中遇到bash选项卡补全问题。软件版本$cat/etc/redhat-releaseCentOSLinuxrelease7.1.1503(Core)$uname-r3.10.0-229.14.1.el7.x86_64$bash--versionGNUbash,version4.2.46(1)-release(x86_64-redhat-linux-gnu)我有一个名为./run_prog.sh的bash脚本(可执行文件),它使用-c选项(或long--config=)在命令行上获取配置文件。完整命令示例:./r

linux - 在 bash 脚本中将十进制转换为十六进制

我想将bash脚本中的十进制数(循环索引号)转换为十六进制数以供另一个命令使用。像这样的东西:for((i=1;i其中a应该是具有四位数字和十六进制标识符的十六进制。例如,如果i的值为100,则a的值应为0x0064。怎么做? 最佳答案 您可以使用printf.$printf"0x%04x"1000x0064在您的示例中,您可能会使用a="$(printf'0x%04x'$i)"。 关于linux-在bash脚本中将十进制转换为十六进制,我们在StackOverflow上找到一个类似的问

linux - 为什么有人会使用 echo 为 bash 或 ksh 中的变量赋值?

最近我发现在客户的ksh脚本中使用echo来分配变量的异常用法。比如下面这样的例子有很多a='something'b='else'c=`echo"${a}${b}"`我一直无法想出为什么有人会这样做。这可能有一些遗留原因吗?(我做shell已经30多年了,以前从未见过这个)还是只是无知? 最佳答案 无论是在当前的bash中,还是在它的POSIXsh或Bourne前身中,都没有任何令人信服的理由。c="$a$b"...是给定代码的完全替代,运行速度更快(尝试将其置于循环中;由反引号创建的命令替换,派生出一个新的shell作为子进程并读